package 剑指offer.demo6;
//https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?
/*
方法比较多，这里只列举一种最好操作且很多简单的开个思路
 */
public class 两个链表的第一个公共结点 {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        //合法性判断
        if (pHead1 == null || pHead2 == null)
            return null;
        //定义两个节点用来操作
        ListNode cur1 = pHead1 , cur2 = pHead2;
        //注意循环条件是不是好奇最后为什么不会无限循环另一个链表，就是因为这个退出条件，因为无论如何最后他两一定会相等，没有公共节点也是两个null
        while (cur1 != cur2){
            cur1 = cur1 == null ? pHead2 : cur1.next;
            cur2 = cur2 == null ? pHead1 : cur2.next;
        }
        return cur1;
    }

    //题目给定链表
    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }

}

